# -*- coding:utf-8 -*-

from sqlalchemy import Column, Integer, String, DateTime, Text
from config.database import BaseMixin, Base


class AgentClient(Base, BaseMixin):
    """
    Agent客户端信息表 - 管理连接到系统的所有agent客户端
    """
    __tablename__ = "agent_client"
    
    # 基本信息
    client_name = Column(String(100), nullable=False, comment='客户端名称')
    client_id = Column(String(64), nullable=False, unique=True, comment='客户端唯一ID')
    
    # 网络信息
    ip_address = Column(String(50), nullable=True, comment='IP地址')
    port = Column(Integer, nullable=True, comment='端口')
    hostname = Column(String(100), nullable=True, comment='主机名')
    
    # 客户端类型和状态
    client_type = Column(String(20), nullable=True, default='search', comment='客户端类型: search/order')
    online_status = Column(String(20), nullable=True, default='offline', comment='在线状态: online/offline')
    work_status = Column(String(20), nullable=True, default='idle', comment='工作状态: idle/searching/ordering/error')
    browser_status = Column(String(20), nullable=True, default='stopped', comment='浏览器状态: stopped/running/error')
    login_status = Column(String(30), nullable=True, default='not_logged_in', comment='登录状态: not_logged_in/logging_in/logged_in/login_error')
    
    # 账号信息
    account = Column(String(100), nullable=True, comment='登录账号')
    account_nickname = Column(String(200), nullable=True, comment='账号昵称（从cookie解析）')
    cookies = Column(Text, nullable=True, comment='Cookie数据（JSON格式）')
    default_address_id = Column(String(100), nullable=True, comment='默认收货地址ID')
    default_address_info = Column(Text, nullable=True, comment='默认收货地址详细信息（JSON格式，包含姓名、地址等）')
    remark = Column(String(500), nullable=True, comment='备注（用于标识账号信息等）')
    
    # 分配信息（1对1分配）
    assigned_user_id = Column(Integer, nullable=True, comment='分配的用户ID（单个用户，NULL表示管理员管理）')
    
    # 时间信息
    connected_at = Column(DateTime, nullable=True, comment='连接时间')
    last_heartbeat = Column(DateTime, nullable=True, comment='最后心跳时间')
    
    # 错误信息
    last_error = Column(Text, nullable=True, comment='最后错误信息')
    error_count = Column(Integer, nullable=True, default=0, comment='错误次数')
    
    # 其他信息
    status = Column(String(1), nullable=True, default='0', comment='状态（0正常 1停用）')
